<template>
  <div>
    <!-- 面包屑导航区域 -->
    <el-breadcrumb separator-class="el-icon-arrow-right">
      <!-- 点击 首页 ，跳转到/home，但是home设置了路由跳转，就直接到Welcome页面了 -->
      <el-breadcrumb-item :to="{ path: '/home' }">首页</el-breadcrumb-item>
      <el-breadcrumb-item>数据统计</el-breadcrumb-item>
      <el-breadcrumb-item>数据报表</el-breadcrumb-item>
    </el-breadcrumb>
    <!-- 卡片视图区域 -->
    <el-card shadow="hover">
      <!-- 要使用Echarts绘制图形，要先安装运行依赖Echarts -->
      <!-- 第二步：为ECharts准备一个具备大小（宽高）的Dom -->
      <div
        id="main"
        style="width: 800px;height:500px;"
      ></div>
    </el-card>
  </div>
</template>

<script>
// ? 第一步： 导入Echarts，用于绘制图表
import echarts from 'echarts'
// 引入深拷贝
import _ from 'lodash'

export default {
  // created () {

  // },
  //! mounted()函数就是表示页面上的DOM元素全部渲染完毕了
  // 初始化echarts必须要等页面上的DOM渲染完成才可以初始化
  async mounted () {
    // ? 第三步： 基于准备好的dom，初始化echarts实例
    var myChart = echarts.init(document.getElementById('main'))

    // 发起后端请求，获取后端数据，作为图表的数据源
    const { data: res } = await this.$axios.get('reports/type/1')
    if (res.meta.status !== 200) {
      return this.$message.error('获取这折线图数据失败')
    }

    // ? 第四步： 指定图表的配置项和数据
    //! 此时，获取到的res.data还不能作为图表的数据，因为格式不完整，鼠标移入不会有跟随效果，所以要跟本地option合并
    //! 合并就要用到深拷贝的merge方法，将两个数据合并在一起
    const result = _.merge(res.data, this.options)

    // ? 第五步：使用刚指定的配置项和数据显示图表。
    myChart.setOption(result)
  },
  data () {
    return {
      // 图表数据格式，用于产生鼠标移入时的tip显示效果
      //! 所以，需要将请求后端获取的res.data跟这个option合并
      // ? 想要合并，所以要用到深拷贝
      options: {
        title: {
          text: '用户来源'
        },
        tooltip: {
          trigger: 'axis',
          axisPointer: {
            type: 'cross',
            label: {
              backgroundColor: '#E9EEF3'
            }
          }
        },
        grid: {
          left: '3%',
          right: '4%',
          bottom: '3%',
          containLabel: true
        },
        xAxis: [
          {
            boundaryGap: false
          }
        ],
        yAxis: [
          {
            type: 'value'
          }
        ]
      }
    }
  },
  methods: {

  }

}
</script>

<style lang="less" scoped>

</style>
